/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.beans; import java.beans.*; import java.io.IOException; import java.lang.reflect.Modifier; import java.lang.reflect.InvocationTargetException; import java.util.ResourceBundle; import java.text.MessageFormat; import org.openide.TopManager; import org.openide.NotifyDescriptor; import org.openide.src.*; import org.openide.nodes.*; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; import org.openide.util.Utilities; import org.openide.src.nodes.ClassChildren; /** Node representing a event set pattern. * @see Event Set Pattern * @author Petr Hrebejk */ public class EventSetPatternNode extends PatternNode implements IconBases { /** Create a new field node. * @param element field element to represent * @param writeable <code>true</code> to be writable */ public EventSetPatternNode( EventSetPattern pattern, boolean writeable) { //super(pattern, Children.LEAF, writeable); super(pattern, new PatternChildren( org.openide.src.nodes.DefaultFactory.READ_ONLY, pattern.getTypeElement(), false ), writeable); superSetName( pattern.getName() ); } public HelpCtx getHelpCtx () { return new HelpCtx (EventSetPatternNode.class); } /** Sets the name of Pattern, to new value */ protected void setPatternName( String name ) throws SourceException { if ( testNameValidity(name) ) { ((EventSetPattern)pattern).setName(name); superSetName( name ); } } /** Sets the name of the node */ public void setName( String name ) { try { setPatternName(name); } catch (SourceException e) { } } /** Tests if the given string is valid name for associated pattern and if not, notifies * the user. * @return true if it is ok. */ boolean testNameValidity( String name ) { if (! Utilities.isJavaIdentifier( name ) ) { TopManager.getDefault().notify( new NotifyDescriptor.Message(bundle.getString("MSG_Not_Valid_Identifier"), NotifyDescriptor.ERROR_MESSAGE) ); return false; } if (name.indexOf( "Listener" ) <= 0 ) { // NOI18N String msg = MessageFormat.format( PatternNode.bundle.getString("FMT_InvalidEventSourceName"), new Object[] { name } ); TopManager.getDefault().notify( new NotifyDescriptor.Message(msg, NotifyDescriptor.ERROR_MESSAGE) ); return false; } return true; } /** Resolve the current icon base. * @return icon base string. */ protected String resolveIconBase() { if (((EventSetPattern)pattern).isUnicast() ) return EVENTSET_UNICAST; else return EVENTSET_MULTICAST; } /** Gets the short description of this node. * @return A localized short description associated with this node. */ public String getShortDescription() { return (((EventSetPattern)pattern).isUnicast () ? bundle.getString( "HINT_UnicastEventSet" ) : bundle.getString( "HINT_MulticastEventSet" ) ) + " : " + getName(); // NOI18N } /** This method resolve the appropriate hint format for the type * of the element. It defines the short description. */ protected ElementFormat getHintElementFormat() { return sourceOptions.getFieldElementLongFormat(); } /** Creates property set for this node */ protected Sheet createSheet () { Sheet sheet = Sheet.createDefault(); Sheet.Set ps = sheet.get(Sheet.PROPERTIES); ps.put(createNameProperty( writeable )); ps.put(createTypeProperty( writeable )); ps.put(createIsUnicastProperty( writeable )); ps.put(createAddListenerProperty( false )); ps.put(createRemoveListenerProperty( false )); return sheet; } /** Removes the element from the class and calls superclass. * * @exception IOException if SourceException is thrown * from the underlayed Element. */ /* public void destroy() throws IOException { /* try { FieldElement el = (FieldElement) element; el.getDeclaringClass().removeField(el); } catch (SourceException e) { throw new IOException(e.getMessage()); } super.destroy(); } */ /** Overrides the default implementation of clone node */ public Node cloneNode() { return new EventSetPatternNode((EventSetPattern)pattern, writeable ); } /** Create a property for the field type. * @param canW <code>false</code> to force property to be read-only * @return the property */ protected Node.Property createTypeProperty(boolean canW) { return new PatternPropertySupport(PROP_TYPE, Type.class, canW) { /** Gets the value */ public Object getValue () { return ((EventSetPattern)pattern).getType(); } /** Sets the value */ public void setValue(Object val) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { super.setValue(val); if (!(val instanceof Type)) throw new IllegalArgumentException(); try { pattern.patternAnalyser.setIgnore( true ); ((EventSetPattern)pattern).setType((Type)val); pattern.patternAnalyser.setIgnore( false ); } catch (SourceException e) { throw new InvocationTargetException(e); } } }; } /** Create a property for the field type. * @param canW <code>false</code> to force property to be read-only * @return the property */ protected Node.Property createIsUnicastProperty(boolean canW) { return new PatternPropertySupport(PROP_ISUNICAST, boolean.class, canW) { /** Gets the value */ public Object getValue () { return new Boolean (((EventSetPattern)pattern).isUnicast()); } /** Sets the value */ public void setValue(Object val) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { super.setValue(val); if (!(val instanceof Boolean)) throw new IllegalArgumentException(); try { pattern.patternAnalyser.setIgnore( true ); ((EventSetPattern)pattern).setIsUnicast(((Boolean)val).booleanValue()); pattern.patternAnalyser.setIgnore( false ); setIconBase( resolveIconBase() ); } catch (SourceException e) { throw new InvocationTargetException(e); } } }; } /** Create a property for the addListener method. * @param canW <code>false</code> to force property to be read-only * @return the property */ protected Node.Property createAddListenerProperty(boolean canW) { return new PatternPropertySupport(PROP_ADDLISTENER, String.class, canW) { /** Gets the value */ public Object getValue () { ElementFormat fmt = new ElementFormat ("{n} ({p})"); // NOI18N MethodElement method = ((EventSetPattern)pattern).getAddListenerMethod(); if ( method == null ) return bundle.getString("LAB_NoMethod"); else return (fmt.format (method)); } }; } /** Create a property for the removeListener method. * @param canW <code>false</code> to force property to be read-only * @return the property */ protected Node.Property createRemoveListenerProperty(boolean canW) { return new PatternPropertySupport(PROP_REMOVELISTENER, String.class, canW) { /** Gets the value */ public Object getValue () { ElementFormat fmt = new ElementFormat ("{n} ({p})"); // NOI18N MethodElement method = ((EventSetPattern)pattern).getRemoveListenerMethod(); if ( method == null ) return bundle.getString("LAB_NoMethod"); else return (fmt.format (method)); } }; } } /* * Log * 6 Gandalf 1.5 1/12/00 Petr Hrebejk i18n * 5 Gandalf 1.4 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun * Microsystems Copyright in File Comment * 4 Gandalf 1.3 8/2/99 Petr Hrebejk EventSetNode chilfren & * EventSets types with src. code fixed * 3 Gandalf 1.2 7/26/99 Petr Hrebejk Better implementation of * patterns resolving * 2 Gandalf 1.1 7/8/99 Jesse Glick Context help. * 1 Gandalf 1.0 6/28/99 Petr Hrebejk * $ */